package ar.edu.utn.frba.dds.aterrizar.busquedas;

import java.util.ArrayList;
import java.util.List;

import ar.edu.utn.frba.dds.aterrizar.SobreRecarga;
import ar.edu.utn.frba.dds.aterrizar.aerolineas.AerolineasInterface;
import ar.edu.utn.frba.dds.aterrizar.aerolineas.OperadorDeAerolineas;
import ar.edu.utn.frba.dds.aterrizar.usuarios.Usuario;

public class Vuelo {
	
	public static OperadorDeAerolineas operador = OperadorDeAerolineas.getInstance();

	private AerolineasInterface aerolinea;
	private String codigoDeVuelo;
	private String codigoDeAsiento;
	private String precioBase;
	private String clase;
	private String ubicacion;
	private String estado;
	private String DNIcomprador;

	private List<SobreRecarga> lstsobrerecarga;

	private String horarioSalida;
	private String horarioLlegada;
	private String aeroOrigen;
	private String aeroDestino;
	private String fechaSalida;
	private String fechaLlegada;
	
	public Vuelo(String codigoDeVuelo, String codigoDeAsiento, String precioBase,
			String clase, String ubicacion, String estado, String DNIcomprador, String horarioSalida,
			String horarioLlegada, String origen, String destino, String fechaSalida,
			String fechaLlegada, AerolineasInterface aerolinea) {
		setAerolinea(aerolinea);
		setCodigoDeVuelo(codigoDeVuelo);
		setCodigoDeAsiento(codigoDeAsiento);
		setPrecioBase(precioBase);
		setClase(clase);
		setUbicacion(ubicacion);
		setEstado(estado);
		setDNIcomprador(DNIcomprador);
		setHorarioSalida(horarioSalida);
		setHorarioLlegada(horarioLlegada);
		setAeroOrigen(origen);
		setAeroDestino(destino);
		setFechaSalida(fechaSalida);
		setFechaLlegada(fechaLlegada);
	}

	public String getCodigoDeAsiento() {
		return codigoDeAsiento;
	}

	public void setCodigoDeAsiento(String codigoDeAsiento) {
		this.codigoDeAsiento = codigoDeAsiento;
	}
	
	public void setAerolinea(AerolineasInterface aerolinea) {
		this.aerolinea = aerolinea;
	}

	public AerolineasInterface getAerolinea() {
		return this.aerolinea;
	}

	
	public String getCodigoDeVuelo() {
		return codigoDeVuelo;
	}

	public void setCodigoDeVuelo(String codigDeVuelo) {
		this.codigoDeVuelo = codigDeVuelo;
	}

	public String getPrecioBase() {
		return precioBase;
	}

	public void setPrecioBase(String precioBase) {
		this.precioBase = precioBase;
	}

	public String getClase() {
		return clase;
	}

	public void setClase(String clase) {
		this.clase = clase;
	}

	public String getUbicacion() {
		return ubicacion;
	}

	public void setUbicacion(String ubicacion) {
		this.ubicacion = ubicacion;
	}

	public String getEstado() {
		return estado;
	}

	public void setEstado(String estado) {
		this.estado = estado;
	}

	public String getDNIcomprador() {
		return DNIcomprador;
	}

	public void setDNIcomprador(String dNIcomprador) {
		DNIcomprador = dNIcomprador;
	}


	public List<SobreRecarga> getSobreRecarga() {
		return lstsobrerecarga;
	}

	public void setSobreRecarga(List<SobreRecarga> lstSobreRecarga) {
		lstsobrerecarga = lstSobreRecarga;
	}

	public String getHorarioSalida() {
		return horarioSalida;
	}

	public void setHorarioSalida(String horarioSalida) {
		this.horarioSalida = horarioSalida;
	}

	public String getHorarioLlegada() {
		return horarioLlegada;
	}

	public void setHorarioLlegada(String horarioLlegada) {
		this.horarioLlegada = horarioLlegada;
	}

	public String getAeroOrigen() {
		return aeroOrigen;
	}

	public void setAeroOrigen(String aeroOrigen) {
		this.aeroOrigen = aeroOrigen;
	}

	public String getAeroDestino() {
		return aeroDestino;
	}

	public void setAeroDestino(String aeroDestino) {
		this.aeroDestino = aeroDestino;
	}

	public String getFechaSalida() {
		return fechaSalida;
	}

	public void setFechaSalida(String fechaSalida) {
		this.fechaSalida = fechaSalida;
	}

	public String getFechaLlegada() {
		return fechaLlegada;
	}

	public void setFechaLlegada(String fechaLlegada) {
		this.fechaLlegada = fechaLlegada;

	}

	public boolean cumpleRequerimientosExtras(Usuario usuario) {
		boolean seCumple=true;
		ArrayList<Condiciones> condicionesExtra = usuario.getBusqueda().getCondicionesExtra();
		for (Condiciones unaCondicion : condicionesExtra) {
			if (!unaCondicion.seCumplePara(this, usuario)) {
				seCumple= false;
			}
		}
		return seCumple;
	}
	
	public boolean esSuperofertaPara(AerolineasInterface aerolinea, Usuario usuario) {
		float precioTotal = aerolinea.calcularPrecioDeUnVuelo(this, usuario); 
		boolean condicion1 = clase.equals("P") && precioTotal < 8000;
		boolean condicion2 = clase.equals("E") && precioTotal < 4000;
		return condicion1 || condicion2;

	}
	
	public boolean esVisiblePara(AerolineasInterface aerolinea, Usuario usuario) {
		boolean esSuperoferta = this.esSuperofertaPara(aerolinea, usuario);
		if(esSuperoferta) {
			return usuario.getActitudSuperoferta();
		}
		return true;
	}

	public float getPrecioFinal(Usuario usuario) {
		float precioBase = Float.parseFloat(this.getPrecioBase());
		return precioBase + 15 * precioBase / 100 + usuario.getRecargo();
	}
	
	public int getDuracionEnMinutos() {
		return operador.getDuracionDeVueloEnMinutos(this);
	}
	
	public String getDuracionEnStringHora() {
		return operador.expresarMinutosEnStringHora(getDuracionEnMinutos());
	}	

	public int getCantidadDeAsientosVendidos(String codigoDeVuelo) {
		return getAerolinea().getCantidadDeAsientosVendidos(codigoDeVuelo);
	}
	
}
